<!DOCTYPE html>
<style>
#alignContentAuto {
    align-content: auto;
}

#alignContentBaseline {
    align-content: baseline;
}

#alignContentFirstBaseline {
    align-content: first baseline;
}

#alignContentLastBaseline {
    align-content: last baseline;
}

#alignContentSpaceBetween {
    align-content: space-between;
}

#alignContentSpaceAround {
    align-content: space-around;
}

#alignContentSpaceEvenly {
    align-content: space-evenly;
}

#alignContentStretch {
    align-content: stretch;
}

#alignContentStart {
    align-content: start;
}

#alignContentEnd {
    align-content: end;
}

#alignContentCenter {
    align-content: center;
}


#alignContentFlexStart {
    align-content: flex-start;
}

#alignContentFlexEnd {
    align-content: flex-end;
}

#alignContentUnsafeEnd {
    align-content: unsafe end ;
}

#alignContentUnsafeCenter {
    align-content: unsafe center ;
}

#alignContentUnsafeFlexStart {
    align-content: unsafe flex-start;
}

#alignContentSafeFlexEnd {
    align-content: safe flex-end;
}

<!-- Invalid CSS cases -->
#alignContentSpaceBetweenLeft {
    align-content: space-between left;
}

#alignContentSpaceAroundCenter {
    align-content: space-around center;
}

#alignContentSpaceEvenlyRight {
    align-content: space-evenly right;
}

#alignContentStretchStartSafe {
    align-content: stretch start safe;
}

#alignContentSpaceAroundEndUnsafe {
    align-content: space-around end unsafe;
}

#alignContentSpaceEvenlyFlexStartSafe {
    align-content: space-evenly flex-start safe;
}

#alignContentSpaceBetweenSafe {
    align-content: space-between safe;
}

#alignContentSpaceBetweenStretch {
    align-content: space-between stretch;
}

#alignContentSafe {
    align-content: safe;
}

#alignContentRightSafeUnsafe {
    align-content: right safe unsafe;
}

#alignContentCenterLeft {
    align-content: center left;
}
</style>
<p>Test that setting and getting align-content works as expected</p>
<div id="alignContentAuto"></div>
<div id="alignContentBaseline"></div>
<div id="alignContentFirstBaseline"></div>
<div id="alignContentLastBaseline"></div>
<div id="alignContentSpaceBetween"></div>
<div id="alignContentSpaceAround"></div>
<div id="alignContentSpaceEvenly"></div>
<div id="alignContentStretch"></div>
<div id="alignContentStart"></div>
<div id="alignContentEnd"></div>
<div id="alignContentCenter"></div>
<div id="alignContentFlexStart"></div>
<div id="alignContentFlexEnd"></div>
<div id="alignContentUnsafeEnd"></div>
<div id="alignContentUnsafeCenter"></div>
<div id="alignContentSafeSelfEnd"></div>
<div id="alignContentSafeSelfStart"></div>
<div id="alignContentUnsafeFlexStart"></div>
<div id="alignContentSafeFlexEnd"></div>
<div id="alignContentEndUnsafe"></div>
<div id="alignContentCenterUnsafe"></div>
<div id="alignContentFlexStartUnsafe"></div>
<div id="alignContentFlexEndSafe"></div>

<div id="alignContentSpaceBetweenLeft"></div>
<div id="alignContentSpaceAroundCenter"></div>
<div id="alignContentSpaceEvenlyRight"></div>
<div id="alignContentStretchStartSafe"></div>
<div id="alignContentSpaceAroundEndUnsafe"></div>
<div id="alignContentSpaceEvenlyFlexStartSafe"></div>
<div id="alignContentSpaceBetweenSafe"></div>
<div id="alignContentSpaceBetweenStretch"></div>
<div id="alignContentSafe"></div>
<div id="alignContentRightSafeUnsafe"></div>
<div id="alignContentCenterLeft"></div>

<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="resources/alignment-parsing-utils-th.js"></script>
<script>
test(function() {
    var alignContentAuto = document.getElementById("alignContentAuto");
    checkValues(alignContentAuto, "alignContent", "align-content", "", "normal");
    var alignContentBaseline = document.getElementById("alignContentBaseline");
    checkValues(alignContentBaseline, "alignContent", "align-content", "", "baseline");
    var alignContentLastBaseline = document.getElementById("alignContentFirstBaseline");
    checkValues(alignContentLastBaseline, "alignContent", "align-content", "", "baseline");
    var alignContentLastBaseline = document.getElementById("alignContentLastBaseline");
    checkValues(alignContentLastBaseline, "alignContent", "align-content", "", "last baseline");
    var alignContentSpaceBetween = document.getElementById("alignContentSpaceBetween");
    checkValues(alignContentSpaceBetween, "alignContent", "align-content", "", "space-between");
    var alignContentSpaceAround = document.getElementById("alignContentSpaceAround");
    checkValues(alignContentSpaceAround, "alignContent", "align-content", "", "space-around");
    var alignContentSpaceEvenly = document.getElementById("alignContentSpaceEvenly");
    checkValues(alignContentSpaceEvenly, "alignContent", "align-content", "", "space-evenly");
    var alignContentStretch = document.getElementById("alignContentStretch");
    checkValues(alignContentStretch, "alignContent", "align-content", "", "stretch");
    var alignContentStart = document.getElementById("alignContentStart");
    checkValues(alignContentStart, "alignContent", "align-content", "", "start");
    var alignContentEnd = document.getElementById("alignContentEnd");
    checkValues(alignContentEnd, "alignContent", "align-content", "", "end");
    var alignContentCenter = document.getElementById("alignContentCenter");
    checkValues(alignContentCenter, "alignContent", "align-content", "", "center");
    var alignContentFlexStart = document.getElementById("alignContentFlexStart");
    checkValues(alignContentFlexStart, "alignContent", "align-content", "", "flex-start");
    var alignContentFlexEnd = document.getElementById("alignContentFlexEnd");
    checkValues(alignContentFlexEnd, "alignContent", "align-content", "", "flex-end");
    var alignContentUnsafeEnd = document.getElementById("alignContentUnsafeEnd");
    checkValues(alignContentUnsafeEnd, "alignContent", "align-content", "", "unsafe end");
    var alignContentUnsafeCenter = document.getElementById("alignContentUnsafeCenter");
    checkValues(alignContentUnsafeCenter, "alignContent", "align-content", "", "unsafe center");
    var alignContentUnsafeFlexStart = document.getElementById("alignContentUnsafeFlexStart");
    checkValues(alignContentUnsafeFlexStart, "alignContent", "align-content", "", "unsafe flex-start");
    var alignContentSafeFlexEnd = document.getElementById("alignContentSafeFlexEnd");
    checkValues(alignContentSafeFlexEnd, "alignContent", "align-content", "", "safe flex-end");
}, "Test getting align-content values previously set through CSS.");

test(function() {
    var alignContentEndUnsafe = document.getElementById("alignContentEndUnsafe");
    checkValues(alignContentEndUnsafe, "alignContent", "align-content", "", "normal");
    var alignContentCenterUnsafe = document.getElementById("alignContentCenterUnsafe");
    checkValues(alignContentCenterUnsafe, "alignContent", "align-content", "", "normal");
    var alignContentFlexStartUnsafe = document.getElementById("alignContentFlexStartUnsafe");
    checkValues(alignContentFlexStartUnsafe, "alignContent", "align-content", "", "normal");
    var alignContentFlexEndSafe = document.getElementById("alignContentFlexEndSafe");
    checkValues(alignContentFlexEndSafe, "alignContent", "align-content", "", "normal");
    var alignContentSpaceBetweenLeft = document.getElementById("alignContentSpaceBetweenLeft");
    checkValues(alignContentSpaceBetweenLeft, "alignContent", "align-content", "", "normal");
    var alignContentSpaceAroundCenter = document.getElementById("alignContentSpaceAroundCenter");
    checkValues(alignContentSpaceAroundCenter, "alignContent", "align-content", "", "normal");
    var alignContentSpaceEvenlyRight = document.getElementById("alignContentSpaceEvenlyRight");
    checkValues(alignContentSpaceEvenlyRight, "alignContent", "align-content", "", "normal");
    var alignContentStretchStartSafe = document.getElementById("alignContentStretchStartSafe");
    checkValues(alignContentStretchStartSafe, "alignContent", "align-content", "", "normal");
    var alignContentSpaceAroundEndUnsafe = document.getElementById("alignContentSpaceAroundEndUnsafe");
    checkValues(alignContentSpaceAroundEndUnsafe, "alignContent", "align-content", "", "normal");
    var alignContentSpaceEvenlyFlexStartSafe = document.getElementById("alignContentSpaceEvenlyFlexStartSafe");
    checkValues(alignContentSpaceEvenlyFlexStartSafe, "alignContent", "align-content", "", "normal");
    var alignContentSpaceBetweenSafe = document.getElementById("alignContentSpaceBetweenSafe");
    checkValues(alignContentSpaceBetweenSafe, "alignContent", "align-content", "", "normal");
    var alignContentSpaceBetweenStretch = document.getElementById("alignContentSpaceBetweenStretch");
    checkValues(alignContentSpaceBetweenStretch, "alignContent", "align-content", "", "normal");
    var alignContentSafe = document.getElementById("alignContentSafe");
    checkValues(alignContentSafe, "alignContent", "align-content", "", "normal");
    var alignContentRightSafeUnsafe = document.getElementById("alignContentRightSafeUnsafe");
    checkValues(alignContentRightSafeUnsafe, "alignContent", "align-content", "", "normal");
    var alignContentCenterLeft = document.getElementById("alignContentCenterLeft");
    checkValues(alignContentCenterLeft, "alignContent", "align-content", "", "normal");
}, "Test setting invalid values to align-content through CSS.");

test(function() {
    element = document.createElement("div");
    document.body.appendChild(element);
    checkValues(element, "alignContent", "align-content", "", "normal");
}, "Test initial value of align-content through JS");

test(function() {
    element = document.createElement("div");
    document.body.appendChild(element);
    element.style.alignContent = "center";
    checkValues(element, "alignContent", "align-content",  "center", "center");

    element.style.alignContent = "unsafe start";
    checkValues(element, "alignContent", "align-content",  "unsafe start", "unsafe start");

    element.style.alignContent = "safe flex-end";
    checkValues(element, "alignContent", "align-content",  "safe flex-end", "safe flex-end");

    element.style.alignContent = "unsafe end";
    checkValues(element, "alignContent", "align-content",  "unsafe end", "unsafe end");

    element.style.alignContent = "first baseline";
    checkValues(element, "alignContent", "align-content",  "baseline", "baseline");

    element.style.alignContent = "last baseline";
    checkValues(element, "alignContent", "align-content",  "last baseline", "last baseline");

    element.style.alignContent = "normal";
    checkValues(element, "alignContent", "align-content",  "normal", "normal");

    element.style.display = "flex";
    element.style.alignContent = "normal";
    checkValues(element, "alignContent", "align-content",  "normal", "normal");

    element.style.display = "grid";
    element.style.alignContent = "normal";
    checkValues(element, "alignContent", "align-content",  "normal", "normal");

    element.style.alignContent = "flex-end";
    checkValues(element, "alignContent", "align-content",  "flex-end", "flex-end");
}, "Test getting and setting align-content through JS");

test(function() {
    element = document.createElement("div");
    document.body.appendChild(element);

    checkBadValues(element, "alignContent", "align-content",  "left");
    checkBadValues(element, "alignContent", "align-content",  "right");
    checkBadValues(element, "alignContent", "align-content",  "auto");
    checkBadValues(element, "alignContent", "align-content",  "unsafe auto");
    checkBadValues(element, "alignContent", "align-content",  "auto safe");
    checkBadValues(element, "alignContent", "align-content",  "auto left");
    checkBadValues(element, "alignContent", "align-content",  "safe left");
    checkBadValues(element, "alignContent", "align-content",  "unsafe right");
    checkBadValues(element, "alignContent", "align-content",  "baseline safe");
    checkBadValues(element, "alignContent", "align-content",  "last-baseline center");
    checkBadValues(element, "alignContent", "align-content",  "unsafe unsafe");
    checkBadValues(element, "alignContent", "align-content",  "unsafe safe");
    checkBadValues(element, "alignContent", "align-content",  "center start");
    checkBadValues(element, "alignContent", "align-content",  "baseline safe");
    checkBadValues(element, "alignContent", "align-content",  "unsafe baseline");
    checkBadValues(element, "alignContent", "align-content",  "unsafe safe left");
    checkBadValues(element, "alignContent", "align-content",  "unsafe left safe");
    checkBadValues(element, "alignContent", "align-content",  "left safe unsafe safe");
    checkBadValues(element, "alignContent", "align-content",  "start right space-between");
    checkBadValues(element, "alignContent", "align-content",  "safe stretch");
    checkBadValues(element, "alignContent", "align-content",  "normal space-between");
    checkBadValues(element, "alignContent", "align-content",  "stretch normal");
    checkBadValues(element, "alignContent", "align-content",  "stretch center");
    checkBadValues(element, "alignContent", "align-content",  "space-between right safe");
    checkBadValues(element, "alignContent", "align-content",  "normal safe");
    checkBadValues(element, "alignContent", "align-content",  "space-around stretch");
    checkBadValues(element, "alignContent", "align-content",  "end space-between start");
    checkBadValues(element, "alignContent", "align-content",  "right safe left");
    checkBadValues(element, "alignContent", "align-content",  "unsafe");
    checkBadValues(element, "alignContent", "align-content",  "safe");
    checkBadValues(element, "alignContent", "align-content",  "start safe");
    checkBadValues(element, "alignContent", "align-content",  "end unsafe");
}, "Test bad combinations of align-content");

test(function() {
    element.style.display = "";
    checkInitialValues(element, "alignContent", "align-content", "center", "normal");
}, "Test the value 'initial'");

test(function() {
    element.style.display = "grid";
    checkInitialValues(element, "alignContent", "align-content", "safe start", "normal");
}, "Test the value 'initial' for grid containers");

test(function() {
    element.style.display = "flex";
    checkInitialValues(element, "alignContent", "align-content", "unsafe end", "normal");
}, "Test the value 'initial' for flex containers");

test(function() {
    checkInheritValues("alignContent", "align-content", "end");
    checkInheritValues("alignContent", "align-content", "safe start");
    checkInheritValues("alignContent", "align-content", "unsafe center");
}, "Test the value 'inherit'");
</script>
